package furniture.parser.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.xtext.conversion.ValueConverterException;
import furniture.services.NotationGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalNotationParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'Furniture'", "'{'", "'vars'", "','", "'}'", "'boards'", "'parts'", "'NamedValue'", "'value'", "'Part'", "'placement'", "'board'", "'X'", "'Y'", "'Z'", "'Literal'", "'ValueRef'", "'ref'", "'Addition'", "'values'", "'Multiplication'", "'-'", "'.'", "'E'", "'e'", "'RectangularBoard'", "'thickness'", "'PolygonBoard'", "'points'", "'Point'", "'HORIZONTAL'", "'VERTICAL'", "'FACE'"
    };
    public static final int RULE_ID=5;
    public static final int RULE_STRING=4;
    public static final int RULE_ANY_OTHER=10;
    public static final int RULE_INT=6;
    public static final int RULE_WS=9;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;

        public InternalNotationParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g"; }



     	private NotationGrammarAccess grammarAccess;
     	
        public InternalNotationParser(TokenStream input, IAstFactory factory, NotationGrammarAccess grammarAccess) {
            this(input);
            this.factory = factory;
            registerRules(grammarAccess.getGrammar());
            this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected InputStream getTokenFile() {
        	ClassLoader classLoader = getClass().getClassLoader();
        	return classLoader.getResourceAsStream("furniture/parser/antlr/internal/InternalNotation.tokens");
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "Furniture";	
       	}
       	
       	@Override
       	protected NotationGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start entryRuleFurniture
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:78:1: entryRuleFurniture returns [EObject current=null] : iv_ruleFurniture= ruleFurniture EOF ;
    public final EObject entryRuleFurniture() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFurniture = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:79:2: (iv_ruleFurniture= ruleFurniture EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:80:2: iv_ruleFurniture= ruleFurniture EOF
            {
             currentNode = createCompositeNode(grammarAccess.getFurnitureRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleFurniture_in_entryRuleFurniture75);
            iv_ruleFurniture=ruleFurniture();
            _fsp--;

             current =iv_ruleFurniture; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleFurniture85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleFurniture


    // $ANTLR start ruleFurniture
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:87:1: ruleFurniture returns [EObject current=null] : ( () 'Furniture' '{' ( 'vars' '{' ( (lv_vars_5_0= ruleNamedValue ) ) ( ',' ( (lv_vars_7_0= ruleNamedValue ) ) )* '}' )? ( 'boards' '{' ( (lv_boards_11_0= ruleBoard ) ) ( ',' ( (lv_boards_13_0= ruleBoard ) ) )* '}' )? ( 'parts' '{' ( (lv_parts_17_0= rulePart ) ) ( ',' ( (lv_parts_19_0= rulePart ) ) )* '}' )? '}' ) ;
    public final EObject ruleFurniture() throws RecognitionException {
        EObject current = null;

        EObject lv_vars_5_0 = null;

        EObject lv_vars_7_0 = null;

        EObject lv_boards_11_0 = null;

        EObject lv_boards_13_0 = null;

        EObject lv_parts_17_0 = null;

        EObject lv_parts_19_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:92:6: ( ( () 'Furniture' '{' ( 'vars' '{' ( (lv_vars_5_0= ruleNamedValue ) ) ( ',' ( (lv_vars_7_0= ruleNamedValue ) ) )* '}' )? ( 'boards' '{' ( (lv_boards_11_0= ruleBoard ) ) ( ',' ( (lv_boards_13_0= ruleBoard ) ) )* '}' )? ( 'parts' '{' ( (lv_parts_17_0= rulePart ) ) ( ',' ( (lv_parts_19_0= rulePart ) ) )* '}' )? '}' ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:93:1: ( () 'Furniture' '{' ( 'vars' '{' ( (lv_vars_5_0= ruleNamedValue ) ) ( ',' ( (lv_vars_7_0= ruleNamedValue ) ) )* '}' )? ( 'boards' '{' ( (lv_boards_11_0= ruleBoard ) ) ( ',' ( (lv_boards_13_0= ruleBoard ) ) )* '}' )? ( 'parts' '{' ( (lv_parts_17_0= rulePart ) ) ( ',' ( (lv_parts_19_0= rulePart ) ) )* '}' )? '}' )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:93:1: ( () 'Furniture' '{' ( 'vars' '{' ( (lv_vars_5_0= ruleNamedValue ) ) ( ',' ( (lv_vars_7_0= ruleNamedValue ) ) )* '}' )? ( 'boards' '{' ( (lv_boards_11_0= ruleBoard ) ) ( ',' ( (lv_boards_13_0= ruleBoard ) ) )* '}' )? ( 'parts' '{' ( (lv_parts_17_0= rulePart ) ) ( ',' ( (lv_parts_19_0= rulePart ) ) )* '}' )? '}' )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:93:2: () 'Furniture' '{' ( 'vars' '{' ( (lv_vars_5_0= ruleNamedValue ) ) ( ',' ( (lv_vars_7_0= ruleNamedValue ) ) )* '}' )? ( 'boards' '{' ( (lv_boards_11_0= ruleBoard ) ) ( ',' ( (lv_boards_13_0= ruleBoard ) ) )* '}' )? ( 'parts' '{' ( (lv_parts_17_0= rulePart ) ) ( ',' ( (lv_parts_19_0= rulePart ) ) )* '}' )? '}'
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:93:2: ()
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:94:5: 
            {
             
                    temp=factory.create(grammarAccess.getFurnitureAccess().getFurnitureAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getFurnitureAccess().getFurnitureAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,11,FollowSets000.FOLLOW_11_in_ruleFurniture129); 

                    createLeafNode(grammarAccess.getFurnitureAccess().getFurnitureKeyword_1(), null); 
                
            match(input,12,FollowSets000.FOLLOW_12_in_ruleFurniture139); 

                    createLeafNode(grammarAccess.getFurnitureAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:112:1: ( 'vars' '{' ( (lv_vars_5_0= ruleNamedValue ) ) ( ',' ( (lv_vars_7_0= ruleNamedValue ) ) )* '}' )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==13) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:112:3: 'vars' '{' ( (lv_vars_5_0= ruleNamedValue ) ) ( ',' ( (lv_vars_7_0= ruleNamedValue ) ) )* '}'
                    {
                    match(input,13,FollowSets000.FOLLOW_13_in_ruleFurniture150); 

                            createLeafNode(grammarAccess.getFurnitureAccess().getVarsKeyword_3_0(), null); 
                        
                    match(input,12,FollowSets000.FOLLOW_12_in_ruleFurniture160); 

                            createLeafNode(grammarAccess.getFurnitureAccess().getLeftCurlyBracketKeyword_3_1(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:120:1: ( (lv_vars_5_0= ruleNamedValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:121:1: (lv_vars_5_0= ruleNamedValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:121:1: (lv_vars_5_0= ruleNamedValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:122:3: lv_vars_5_0= ruleNamedValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getFurnitureAccess().getVarsNamedValueParserRuleCall_3_2_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleNamedValue_in_ruleFurniture181);
                    lv_vars_5_0=ruleNamedValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getFurnitureRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"vars",
                    	        		lv_vars_5_0, 
                    	        		"NamedValue", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:144:2: ( ',' ( (lv_vars_7_0= ruleNamedValue ) ) )*
                    loop1:
                    do {
                        int alt1=2;
                        int LA1_0 = input.LA(1);

                        if ( (LA1_0==14) ) {
                            alt1=1;
                        }


                        switch (alt1) {
                    	case 1 :
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:144:4: ',' ( (lv_vars_7_0= ruleNamedValue ) )
                    	    {
                    	    match(input,14,FollowSets000.FOLLOW_14_in_ruleFurniture192); 

                    	            createLeafNode(grammarAccess.getFurnitureAccess().getCommaKeyword_3_3_0(), null); 
                    	        
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:148:1: ( (lv_vars_7_0= ruleNamedValue ) )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:149:1: (lv_vars_7_0= ruleNamedValue )
                    	    {
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:149:1: (lv_vars_7_0= ruleNamedValue )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:150:3: lv_vars_7_0= ruleNamedValue
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getFurnitureAccess().getVarsNamedValueParserRuleCall_3_3_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleNamedValue_in_ruleFurniture213);
                    	    lv_vars_7_0=ruleNamedValue();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getFurnitureRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"vars",
                    	    	        		lv_vars_7_0, 
                    	    	        		"NamedValue", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop1;
                        }
                    } while (true);

                    match(input,15,FollowSets000.FOLLOW_15_in_ruleFurniture225); 

                            createLeafNode(grammarAccess.getFurnitureAccess().getRightCurlyBracketKeyword_3_4(), null); 
                        

                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:176:3: ( 'boards' '{' ( (lv_boards_11_0= ruleBoard ) ) ( ',' ( (lv_boards_13_0= ruleBoard ) ) )* '}' )?
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==16) ) {
                alt4=1;
            }
            switch (alt4) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:176:5: 'boards' '{' ( (lv_boards_11_0= ruleBoard ) ) ( ',' ( (lv_boards_13_0= ruleBoard ) ) )* '}'
                    {
                    match(input,16,FollowSets000.FOLLOW_16_in_ruleFurniture238); 

                            createLeafNode(grammarAccess.getFurnitureAccess().getBoardsKeyword_4_0(), null); 
                        
                    match(input,12,FollowSets000.FOLLOW_12_in_ruleFurniture248); 

                            createLeafNode(grammarAccess.getFurnitureAccess().getLeftCurlyBracketKeyword_4_1(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:184:1: ( (lv_boards_11_0= ruleBoard ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:185:1: (lv_boards_11_0= ruleBoard )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:185:1: (lv_boards_11_0= ruleBoard )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:186:3: lv_boards_11_0= ruleBoard
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getFurnitureAccess().getBoardsBoardParserRuleCall_4_2_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleBoard_in_ruleFurniture269);
                    lv_boards_11_0=ruleBoard();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getFurnitureRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"boards",
                    	        		lv_boards_11_0, 
                    	        		"Board", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:208:2: ( ',' ( (lv_boards_13_0= ruleBoard ) ) )*
                    loop3:
                    do {
                        int alt3=2;
                        int LA3_0 = input.LA(1);

                        if ( (LA3_0==14) ) {
                            alt3=1;
                        }


                        switch (alt3) {
                    	case 1 :
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:208:4: ',' ( (lv_boards_13_0= ruleBoard ) )
                    	    {
                    	    match(input,14,FollowSets000.FOLLOW_14_in_ruleFurniture280); 

                    	            createLeafNode(grammarAccess.getFurnitureAccess().getCommaKeyword_4_3_0(), null); 
                    	        
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:212:1: ( (lv_boards_13_0= ruleBoard ) )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:213:1: (lv_boards_13_0= ruleBoard )
                    	    {
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:213:1: (lv_boards_13_0= ruleBoard )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:214:3: lv_boards_13_0= ruleBoard
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getFurnitureAccess().getBoardsBoardParserRuleCall_4_3_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleBoard_in_ruleFurniture301);
                    	    lv_boards_13_0=ruleBoard();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getFurnitureRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"boards",
                    	    	        		lv_boards_13_0, 
                    	    	        		"Board", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop3;
                        }
                    } while (true);

                    match(input,15,FollowSets000.FOLLOW_15_in_ruleFurniture313); 

                            createLeafNode(grammarAccess.getFurnitureAccess().getRightCurlyBracketKeyword_4_4(), null); 
                        

                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:240:3: ( 'parts' '{' ( (lv_parts_17_0= rulePart ) ) ( ',' ( (lv_parts_19_0= rulePart ) ) )* '}' )?
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==17) ) {
                alt6=1;
            }
            switch (alt6) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:240:5: 'parts' '{' ( (lv_parts_17_0= rulePart ) ) ( ',' ( (lv_parts_19_0= rulePart ) ) )* '}'
                    {
                    match(input,17,FollowSets000.FOLLOW_17_in_ruleFurniture326); 

                            createLeafNode(grammarAccess.getFurnitureAccess().getPartsKeyword_5_0(), null); 
                        
                    match(input,12,FollowSets000.FOLLOW_12_in_ruleFurniture336); 

                            createLeafNode(grammarAccess.getFurnitureAccess().getLeftCurlyBracketKeyword_5_1(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:248:1: ( (lv_parts_17_0= rulePart ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:249:1: (lv_parts_17_0= rulePart )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:249:1: (lv_parts_17_0= rulePart )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:250:3: lv_parts_17_0= rulePart
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getFurnitureAccess().getPartsPartParserRuleCall_5_2_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_rulePart_in_ruleFurniture357);
                    lv_parts_17_0=rulePart();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getFurnitureRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"parts",
                    	        		lv_parts_17_0, 
                    	        		"Part", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:272:2: ( ',' ( (lv_parts_19_0= rulePart ) ) )*
                    loop5:
                    do {
                        int alt5=2;
                        int LA5_0 = input.LA(1);

                        if ( (LA5_0==14) ) {
                            alt5=1;
                        }


                        switch (alt5) {
                    	case 1 :
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:272:4: ',' ( (lv_parts_19_0= rulePart ) )
                    	    {
                    	    match(input,14,FollowSets000.FOLLOW_14_in_ruleFurniture368); 

                    	            createLeafNode(grammarAccess.getFurnitureAccess().getCommaKeyword_5_3_0(), null); 
                    	        
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:276:1: ( (lv_parts_19_0= rulePart ) )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:277:1: (lv_parts_19_0= rulePart )
                    	    {
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:277:1: (lv_parts_19_0= rulePart )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:278:3: lv_parts_19_0= rulePart
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getFurnitureAccess().getPartsPartParserRuleCall_5_3_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_rulePart_in_ruleFurniture389);
                    	    lv_parts_19_0=rulePart();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getFurnitureRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"parts",
                    	    	        		lv_parts_19_0, 
                    	    	        		"Part", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop5;
                        }
                    } while (true);

                    match(input,15,FollowSets000.FOLLOW_15_in_ruleFurniture401); 

                            createLeafNode(grammarAccess.getFurnitureAccess().getRightCurlyBracketKeyword_5_4(), null); 
                        

                    }
                    break;

            }

            match(input,15,FollowSets000.FOLLOW_15_in_ruleFurniture413); 

                    createLeafNode(grammarAccess.getFurnitureAccess().getRightCurlyBracketKeyword_6(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleFurniture


    // $ANTLR start entryRuleBoard
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:316:1: entryRuleBoard returns [EObject current=null] : iv_ruleBoard= ruleBoard EOF ;
    public final EObject entryRuleBoard() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBoard = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:317:2: (iv_ruleBoard= ruleBoard EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:318:2: iv_ruleBoard= ruleBoard EOF
            {
             currentNode = createCompositeNode(grammarAccess.getBoardRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleBoard_in_entryRuleBoard449);
            iv_ruleBoard=ruleBoard();
            _fsp--;

             current =iv_ruleBoard; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleBoard459); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleBoard


    // $ANTLR start ruleBoard
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:325:1: ruleBoard returns [EObject current=null] : (this_RectangularBoard_0= ruleRectangularBoard | this_PolygonBoard_1= rulePolygonBoard ) ;
    public final EObject ruleBoard() throws RecognitionException {
        EObject current = null;

        EObject this_RectangularBoard_0 = null;

        EObject this_PolygonBoard_1 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:330:6: ( (this_RectangularBoard_0= ruleRectangularBoard | this_PolygonBoard_1= rulePolygonBoard ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:331:1: (this_RectangularBoard_0= ruleRectangularBoard | this_PolygonBoard_1= rulePolygonBoard )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:331:1: (this_RectangularBoard_0= ruleRectangularBoard | this_PolygonBoard_1= rulePolygonBoard )
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==36) ) {
                alt7=1;
            }
            else if ( (LA7_0==38) ) {
                alt7=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("331:1: (this_RectangularBoard_0= ruleRectangularBoard | this_PolygonBoard_1= rulePolygonBoard )", 7, 0, input);

                throw nvae;
            }
            switch (alt7) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:332:5: this_RectangularBoard_0= ruleRectangularBoard
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getBoardAccess().getRectangularBoardParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleRectangularBoard_in_ruleBoard506);
                    this_RectangularBoard_0=ruleRectangularBoard();
                    _fsp--;

                     
                            current = this_RectangularBoard_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:342:5: this_PolygonBoard_1= rulePolygonBoard
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getBoardAccess().getPolygonBoardParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_rulePolygonBoard_in_ruleBoard533);
                    this_PolygonBoard_1=rulePolygonBoard();
                    _fsp--;

                     
                            current = this_PolygonBoard_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleBoard


    // $ANTLR start entryRuleValue
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:358:1: entryRuleValue returns [EObject current=null] : iv_ruleValue= ruleValue EOF ;
    public final EObject entryRuleValue() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleValue = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:359:2: (iv_ruleValue= ruleValue EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:360:2: iv_ruleValue= ruleValue EOF
            {
             currentNode = createCompositeNode(grammarAccess.getValueRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleValue_in_entryRuleValue568);
            iv_ruleValue=ruleValue();
            _fsp--;

             current =iv_ruleValue; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleValue578); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleValue


    // $ANTLR start ruleValue
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:367:1: ruleValue returns [EObject current=null] : (this_NamedValue_0= ruleNamedValue | this_Literal_1= ruleLiteral | this_ValueRef_2= ruleValueRef | this_Addition_3= ruleAddition | this_Multiplication_4= ruleMultiplication ) ;
    public final EObject ruleValue() throws RecognitionException {
        EObject current = null;

        EObject this_NamedValue_0 = null;

        EObject this_Literal_1 = null;

        EObject this_ValueRef_2 = null;

        EObject this_Addition_3 = null;

        EObject this_Multiplication_4 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:372:6: ( (this_NamedValue_0= ruleNamedValue | this_Literal_1= ruleLiteral | this_ValueRef_2= ruleValueRef | this_Addition_3= ruleAddition | this_Multiplication_4= ruleMultiplication ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:373:1: (this_NamedValue_0= ruleNamedValue | this_Literal_1= ruleLiteral | this_ValueRef_2= ruleValueRef | this_Addition_3= ruleAddition | this_Multiplication_4= ruleMultiplication )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:373:1: (this_NamedValue_0= ruleNamedValue | this_Literal_1= ruleLiteral | this_ValueRef_2= ruleValueRef | this_Addition_3= ruleAddition | this_Multiplication_4= ruleMultiplication )
            int alt8=5;
            switch ( input.LA(1) ) {
            case 18:
                {
                alt8=1;
                }
                break;
            case 26:
                {
                alt8=2;
                }
                break;
            case 27:
                {
                alt8=3;
                }
                break;
            case 29:
                {
                alt8=4;
                }
                break;
            case 31:
                {
                alt8=5;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("373:1: (this_NamedValue_0= ruleNamedValue | this_Literal_1= ruleLiteral | this_ValueRef_2= ruleValueRef | this_Addition_3= ruleAddition | this_Multiplication_4= ruleMultiplication )", 8, 0, input);

                throw nvae;
            }

            switch (alt8) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:374:5: this_NamedValue_0= ruleNamedValue
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getValueAccess().getNamedValueParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleNamedValue_in_ruleValue625);
                    this_NamedValue_0=ruleNamedValue();
                    _fsp--;

                     
                            current = this_NamedValue_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:384:5: this_Literal_1= ruleLiteral
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getValueAccess().getLiteralParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleLiteral_in_ruleValue652);
                    this_Literal_1=ruleLiteral();
                    _fsp--;

                     
                            current = this_Literal_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 3 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:394:5: this_ValueRef_2= ruleValueRef
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getValueAccess().getValueRefParserRuleCall_2(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleValueRef_in_ruleValue679);
                    this_ValueRef_2=ruleValueRef();
                    _fsp--;

                     
                            current = this_ValueRef_2; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 4 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:404:5: this_Addition_3= ruleAddition
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getValueAccess().getAdditionParserRuleCall_3(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleAddition_in_ruleValue706);
                    this_Addition_3=ruleAddition();
                    _fsp--;

                     
                            current = this_Addition_3; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 5 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:414:5: this_Multiplication_4= ruleMultiplication
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getValueAccess().getMultiplicationParserRuleCall_4(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleMultiplication_in_ruleValue733);
                    this_Multiplication_4=ruleMultiplication();
                    _fsp--;

                     
                            current = this_Multiplication_4; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleValue


    // $ANTLR start entryRuleNamedValue
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:430:1: entryRuleNamedValue returns [EObject current=null] : iv_ruleNamedValue= ruleNamedValue EOF ;
    public final EObject entryRuleNamedValue() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNamedValue = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:431:2: (iv_ruleNamedValue= ruleNamedValue EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:432:2: iv_ruleNamedValue= ruleNamedValue EOF
            {
             currentNode = createCompositeNode(grammarAccess.getNamedValueRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleNamedValue_in_entryRuleNamedValue768);
            iv_ruleNamedValue=ruleNamedValue();
            _fsp--;

             current =iv_ruleNamedValue; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleNamedValue778); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleNamedValue


    // $ANTLR start ruleNamedValue
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:439:1: ruleNamedValue returns [EObject current=null] : ( () 'NamedValue' ( (lv_name_2_0= ruleEString ) ) '{' ( 'value' ( (lv_value_5_0= ruleValue ) ) )? '}' ) ;
    public final EObject ruleNamedValue() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_name_2_0 = null;

        EObject lv_value_5_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:444:6: ( ( () 'NamedValue' ( (lv_name_2_0= ruleEString ) ) '{' ( 'value' ( (lv_value_5_0= ruleValue ) ) )? '}' ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:445:1: ( () 'NamedValue' ( (lv_name_2_0= ruleEString ) ) '{' ( 'value' ( (lv_value_5_0= ruleValue ) ) )? '}' )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:445:1: ( () 'NamedValue' ( (lv_name_2_0= ruleEString ) ) '{' ( 'value' ( (lv_value_5_0= ruleValue ) ) )? '}' )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:445:2: () 'NamedValue' ( (lv_name_2_0= ruleEString ) ) '{' ( 'value' ( (lv_value_5_0= ruleValue ) ) )? '}'
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:445:2: ()
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:446:5: 
            {
             
                    temp=factory.create(grammarAccess.getNamedValueAccess().getNamedValueAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getNamedValueAccess().getNamedValueAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,18,FollowSets000.FOLLOW_18_in_ruleNamedValue822); 

                    createLeafNode(grammarAccess.getNamedValueAccess().getNamedValueKeyword_1(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:460:1: ( (lv_name_2_0= ruleEString ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:461:1: (lv_name_2_0= ruleEString )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:461:1: (lv_name_2_0= ruleEString )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:462:3: lv_name_2_0= ruleEString
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getNamedValueAccess().getNameEStringParserRuleCall_2_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleNamedValue843);
            lv_name_2_0=ruleEString();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getNamedValueRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_2_0, 
            	        		"EString", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,12,FollowSets000.FOLLOW_12_in_ruleNamedValue853); 

                    createLeafNode(grammarAccess.getNamedValueAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:488:1: ( 'value' ( (lv_value_5_0= ruleValue ) ) )?
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==19) ) {
                alt9=1;
            }
            switch (alt9) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:488:3: 'value' ( (lv_value_5_0= ruleValue ) )
                    {
                    match(input,19,FollowSets000.FOLLOW_19_in_ruleNamedValue864); 

                            createLeafNode(grammarAccess.getNamedValueAccess().getValueKeyword_4_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:492:1: ( (lv_value_5_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:493:1: (lv_value_5_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:493:1: (lv_value_5_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:494:3: lv_value_5_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getNamedValueAccess().getValueValueParserRuleCall_4_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_ruleNamedValue885);
                    lv_value_5_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getNamedValueRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"value",
                    	        		lv_value_5_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,15,FollowSets000.FOLLOW_15_in_ruleNamedValue897); 

                    createLeafNode(grammarAccess.getNamedValueAccess().getRightCurlyBracketKeyword_5(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleNamedValue


    // $ANTLR start entryRulePart
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:528:1: entryRulePart returns [EObject current=null] : iv_rulePart= rulePart EOF ;
    public final EObject entryRulePart() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePart = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:529:2: (iv_rulePart= rulePart EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:530:2: iv_rulePart= rulePart EOF
            {
             currentNode = createCompositeNode(grammarAccess.getPartRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_rulePart_in_entryRulePart933);
            iv_rulePart=rulePart();
            _fsp--;

             current =iv_rulePart; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePart943); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRulePart


    // $ANTLR start rulePart
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:537:1: rulePart returns [EObject current=null] : ( () 'Part' ( (lv_name_2_0= ruleEString ) ) '{' ( 'placement' ( (lv_placement_5_0= rulePlacement ) ) )? ( 'board' ( ( ruleEString ) ) )? ( 'X' ( (lv_X_9_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_11_0= ruleValue ) ) )? ( 'Z' ( (lv_Z_13_0= ruleValue ) ) )? '}' ) ;
    public final EObject rulePart() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_name_2_0 = null;

        Enumerator lv_placement_5_0 = null;

        EObject lv_X_9_0 = null;

        EObject lv_Y_11_0 = null;

        EObject lv_Z_13_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:542:6: ( ( () 'Part' ( (lv_name_2_0= ruleEString ) ) '{' ( 'placement' ( (lv_placement_5_0= rulePlacement ) ) )? ( 'board' ( ( ruleEString ) ) )? ( 'X' ( (lv_X_9_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_11_0= ruleValue ) ) )? ( 'Z' ( (lv_Z_13_0= ruleValue ) ) )? '}' ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:543:1: ( () 'Part' ( (lv_name_2_0= ruleEString ) ) '{' ( 'placement' ( (lv_placement_5_0= rulePlacement ) ) )? ( 'board' ( ( ruleEString ) ) )? ( 'X' ( (lv_X_9_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_11_0= ruleValue ) ) )? ( 'Z' ( (lv_Z_13_0= ruleValue ) ) )? '}' )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:543:1: ( () 'Part' ( (lv_name_2_0= ruleEString ) ) '{' ( 'placement' ( (lv_placement_5_0= rulePlacement ) ) )? ( 'board' ( ( ruleEString ) ) )? ( 'X' ( (lv_X_9_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_11_0= ruleValue ) ) )? ( 'Z' ( (lv_Z_13_0= ruleValue ) ) )? '}' )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:543:2: () 'Part' ( (lv_name_2_0= ruleEString ) ) '{' ( 'placement' ( (lv_placement_5_0= rulePlacement ) ) )? ( 'board' ( ( ruleEString ) ) )? ( 'X' ( (lv_X_9_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_11_0= ruleValue ) ) )? ( 'Z' ( (lv_Z_13_0= ruleValue ) ) )? '}'
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:543:2: ()
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:544:5: 
            {
             
                    temp=factory.create(grammarAccess.getPartAccess().getPartAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getPartAccess().getPartAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,20,FollowSets000.FOLLOW_20_in_rulePart987); 

                    createLeafNode(grammarAccess.getPartAccess().getPartKeyword_1(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:558:1: ( (lv_name_2_0= ruleEString ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:559:1: (lv_name_2_0= ruleEString )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:559:1: (lv_name_2_0= ruleEString )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:560:3: lv_name_2_0= ruleEString
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getPartAccess().getNameEStringParserRuleCall_2_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_rulePart1008);
            lv_name_2_0=ruleEString();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getPartRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_2_0, 
            	        		"EString", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,12,FollowSets000.FOLLOW_12_in_rulePart1018); 

                    createLeafNode(grammarAccess.getPartAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:586:1: ( 'placement' ( (lv_placement_5_0= rulePlacement ) ) )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0==21) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:586:3: 'placement' ( (lv_placement_5_0= rulePlacement ) )
                    {
                    match(input,21,FollowSets000.FOLLOW_21_in_rulePart1029); 

                            createLeafNode(grammarAccess.getPartAccess().getPlacementKeyword_4_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:590:1: ( (lv_placement_5_0= rulePlacement ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:591:1: (lv_placement_5_0= rulePlacement )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:591:1: (lv_placement_5_0= rulePlacement )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:592:3: lv_placement_5_0= rulePlacement
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getPartAccess().getPlacementPlacementEnumRuleCall_4_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_rulePlacement_in_rulePart1050);
                    lv_placement_5_0=rulePlacement();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getPartRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"placement",
                    	        		lv_placement_5_0, 
                    	        		"Placement", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:614:4: ( 'board' ( ( ruleEString ) ) )?
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==22) ) {
                alt11=1;
            }
            switch (alt11) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:614:6: 'board' ( ( ruleEString ) )
                    {
                    match(input,22,FollowSets000.FOLLOW_22_in_rulePart1063); 

                            createLeafNode(grammarAccess.getPartAccess().getBoardKeyword_5_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:618:1: ( ( ruleEString ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:619:1: ( ruleEString )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:619:1: ( ruleEString )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:620:3: ruleEString
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getPartRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                     
                    	        currentNode=createCompositeNode(grammarAccess.getPartAccess().getBoardBoardCrossReference_5_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_rulePart1086);
                    ruleEString();
                    _fsp--;

                     
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:634:4: ( 'X' ( (lv_X_9_0= ruleValue ) ) )?
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==23) ) {
                alt12=1;
            }
            switch (alt12) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:634:6: 'X' ( (lv_X_9_0= ruleValue ) )
                    {
                    match(input,23,FollowSets000.FOLLOW_23_in_rulePart1099); 

                            createLeafNode(grammarAccess.getPartAccess().getXKeyword_6_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:638:1: ( (lv_X_9_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:639:1: (lv_X_9_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:639:1: (lv_X_9_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:640:3: lv_X_9_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getPartAccess().getXValueParserRuleCall_6_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_rulePart1120);
                    lv_X_9_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getPartRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"X",
                    	        		lv_X_9_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:662:4: ( 'Y' ( (lv_Y_11_0= ruleValue ) ) )?
            int alt13=2;
            int LA13_0 = input.LA(1);

            if ( (LA13_0==24) ) {
                alt13=1;
            }
            switch (alt13) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:662:6: 'Y' ( (lv_Y_11_0= ruleValue ) )
                    {
                    match(input,24,FollowSets000.FOLLOW_24_in_rulePart1133); 

                            createLeafNode(grammarAccess.getPartAccess().getYKeyword_7_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:666:1: ( (lv_Y_11_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:667:1: (lv_Y_11_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:667:1: (lv_Y_11_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:668:3: lv_Y_11_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getPartAccess().getYValueParserRuleCall_7_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_rulePart1154);
                    lv_Y_11_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getPartRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"Y",
                    	        		lv_Y_11_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:690:4: ( 'Z' ( (lv_Z_13_0= ruleValue ) ) )?
            int alt14=2;
            int LA14_0 = input.LA(1);

            if ( (LA14_0==25) ) {
                alt14=1;
            }
            switch (alt14) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:690:6: 'Z' ( (lv_Z_13_0= ruleValue ) )
                    {
                    match(input,25,FollowSets000.FOLLOW_25_in_rulePart1167); 

                            createLeafNode(grammarAccess.getPartAccess().getZKeyword_8_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:694:1: ( (lv_Z_13_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:695:1: (lv_Z_13_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:695:1: (lv_Z_13_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:696:3: lv_Z_13_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getPartAccess().getZValueParserRuleCall_8_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_rulePart1188);
                    lv_Z_13_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getPartRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"Z",
                    	        		lv_Z_13_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,15,FollowSets000.FOLLOW_15_in_rulePart1200); 

                    createLeafNode(grammarAccess.getPartAccess().getRightCurlyBracketKeyword_9(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end rulePart


    // $ANTLR start entryRuleEString
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:730:1: entryRuleEString returns [String current=null] : iv_ruleEString= ruleEString EOF ;
    public final String entryRuleEString() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleEString = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:731:2: (iv_ruleEString= ruleEString EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:732:2: iv_ruleEString= ruleEString EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEStringRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_entryRuleEString1237);
            iv_ruleEString=ruleEString();
            _fsp--;

             current =iv_ruleEString.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEString1248); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEString


    // $ANTLR start ruleEString
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:739:1: ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) ;
    public final AntlrDatatypeRuleToken ruleEString() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_STRING_0=null;
        Token this_ID_1=null;

         setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:744:6: ( (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:745:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:745:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==RULE_STRING) ) {
                alt15=1;
            }
            else if ( (LA15_0==RULE_ID) ) {
                alt15=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("745:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )", 15, 0, input);

                throw nvae;
            }
            switch (alt15) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:745:6: this_STRING_0= RULE_STRING
                    {
                    this_STRING_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleEString1288); 

                    		current.merge(this_STRING_0);
                        
                     
                        createLeafNode(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0(), null); 
                        

                    }
                    break;
                case 2 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:753:10: this_ID_1= RULE_ID
                    {
                    this_ID_1=(Token)input.LT(1);
                    match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleEString1314); 

                    		current.merge(this_ID_1);
                        
                     
                        createLeafNode(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1(), null); 
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
            	    lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEString


    // $ANTLR start entryRuleLiteral
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:768:1: entryRuleLiteral returns [EObject current=null] : iv_ruleLiteral= ruleLiteral EOF ;
    public final EObject entryRuleLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLiteral = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:769:2: (iv_ruleLiteral= ruleLiteral EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:770:2: iv_ruleLiteral= ruleLiteral EOF
            {
             currentNode = createCompositeNode(grammarAccess.getLiteralRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleLiteral_in_entryRuleLiteral1359);
            iv_ruleLiteral=ruleLiteral();
            _fsp--;

             current =iv_ruleLiteral; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleLiteral1369); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleLiteral


    // $ANTLR start ruleLiteral
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:777:1: ruleLiteral returns [EObject current=null] : ( () 'Literal' '{' ( 'value' ( (lv_value_4_0= ruleEDouble ) ) )? '}' ) ;
    public final EObject ruleLiteral() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_value_4_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:782:6: ( ( () 'Literal' '{' ( 'value' ( (lv_value_4_0= ruleEDouble ) ) )? '}' ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:783:1: ( () 'Literal' '{' ( 'value' ( (lv_value_4_0= ruleEDouble ) ) )? '}' )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:783:1: ( () 'Literal' '{' ( 'value' ( (lv_value_4_0= ruleEDouble ) ) )? '}' )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:783:2: () 'Literal' '{' ( 'value' ( (lv_value_4_0= ruleEDouble ) ) )? '}'
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:783:2: ()
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:784:5: 
            {
             
                    temp=factory.create(grammarAccess.getLiteralAccess().getLiteralAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getLiteralAccess().getLiteralAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,26,FollowSets000.FOLLOW_26_in_ruleLiteral1413); 

                    createLeafNode(grammarAccess.getLiteralAccess().getLiteralKeyword_1(), null); 
                
            match(input,12,FollowSets000.FOLLOW_12_in_ruleLiteral1423); 

                    createLeafNode(grammarAccess.getLiteralAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:802:1: ( 'value' ( (lv_value_4_0= ruleEDouble ) ) )?
            int alt16=2;
            int LA16_0 = input.LA(1);

            if ( (LA16_0==19) ) {
                alt16=1;
            }
            switch (alt16) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:802:3: 'value' ( (lv_value_4_0= ruleEDouble ) )
                    {
                    match(input,19,FollowSets000.FOLLOW_19_in_ruleLiteral1434); 

                            createLeafNode(grammarAccess.getLiteralAccess().getValueKeyword_3_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:806:1: ( (lv_value_4_0= ruleEDouble ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:807:1: (lv_value_4_0= ruleEDouble )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:807:1: (lv_value_4_0= ruleEDouble )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:808:3: lv_value_4_0= ruleEDouble
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getLiteralAccess().getValueEDoubleParserRuleCall_3_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleEDouble_in_ruleLiteral1455);
                    lv_value_4_0=ruleEDouble();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getLiteralRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"value",
                    	        		lv_value_4_0, 
                    	        		"EDouble", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,15,FollowSets000.FOLLOW_15_in_ruleLiteral1467); 

                    createLeafNode(grammarAccess.getLiteralAccess().getRightCurlyBracketKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleLiteral


    // $ANTLR start entryRuleValueRef
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:842:1: entryRuleValueRef returns [EObject current=null] : iv_ruleValueRef= ruleValueRef EOF ;
    public final EObject entryRuleValueRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleValueRef = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:843:2: (iv_ruleValueRef= ruleValueRef EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:844:2: iv_ruleValueRef= ruleValueRef EOF
            {
             currentNode = createCompositeNode(grammarAccess.getValueRefRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleValueRef_in_entryRuleValueRef1503);
            iv_ruleValueRef=ruleValueRef();
            _fsp--;

             current =iv_ruleValueRef; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleValueRef1513); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleValueRef


    // $ANTLR start ruleValueRef
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:851:1: ruleValueRef returns [EObject current=null] : ( () 'ValueRef' '{' ( 'ref' ( ( ruleEString ) ) )? '}' ) ;
    public final EObject ruleValueRef() throws RecognitionException {
        EObject current = null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:856:6: ( ( () 'ValueRef' '{' ( 'ref' ( ( ruleEString ) ) )? '}' ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:857:1: ( () 'ValueRef' '{' ( 'ref' ( ( ruleEString ) ) )? '}' )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:857:1: ( () 'ValueRef' '{' ( 'ref' ( ( ruleEString ) ) )? '}' )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:857:2: () 'ValueRef' '{' ( 'ref' ( ( ruleEString ) ) )? '}'
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:857:2: ()
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:858:5: 
            {
             
                    temp=factory.create(grammarAccess.getValueRefAccess().getValueRefAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getValueRefAccess().getValueRefAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,27,FollowSets000.FOLLOW_27_in_ruleValueRef1557); 

                    createLeafNode(grammarAccess.getValueRefAccess().getValueRefKeyword_1(), null); 
                
            match(input,12,FollowSets000.FOLLOW_12_in_ruleValueRef1567); 

                    createLeafNode(grammarAccess.getValueRefAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:876:1: ( 'ref' ( ( ruleEString ) ) )?
            int alt17=2;
            int LA17_0 = input.LA(1);

            if ( (LA17_0==28) ) {
                alt17=1;
            }
            switch (alt17) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:876:3: 'ref' ( ( ruleEString ) )
                    {
                    match(input,28,FollowSets000.FOLLOW_28_in_ruleValueRef1578); 

                            createLeafNode(grammarAccess.getValueRefAccess().getRefKeyword_3_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:880:1: ( ( ruleEString ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:881:1: ( ruleEString )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:881:1: ( ruleEString )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:882:3: ruleEString
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getValueRefRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                     
                    	        currentNode=createCompositeNode(grammarAccess.getValueRefAccess().getRefNamedValueCrossReference_3_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleValueRef1601);
                    ruleEString();
                    _fsp--;

                     
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,15,FollowSets000.FOLLOW_15_in_ruleValueRef1613); 

                    createLeafNode(grammarAccess.getValueRefAccess().getRightCurlyBracketKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleValueRef


    // $ANTLR start entryRuleAddition
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:908:1: entryRuleAddition returns [EObject current=null] : iv_ruleAddition= ruleAddition EOF ;
    public final EObject entryRuleAddition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAddition = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:909:2: (iv_ruleAddition= ruleAddition EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:910:2: iv_ruleAddition= ruleAddition EOF
            {
             currentNode = createCompositeNode(grammarAccess.getAdditionRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleAddition_in_entryRuleAddition1649);
            iv_ruleAddition=ruleAddition();
            _fsp--;

             current =iv_ruleAddition; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleAddition1659); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleAddition


    // $ANTLR start ruleAddition
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:917:1: ruleAddition returns [EObject current=null] : ( () 'Addition' '{' ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )? '}' ) ;
    public final EObject ruleAddition() throws RecognitionException {
        EObject current = null;

        EObject lv_values_5_0 = null;

        EObject lv_values_7_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:922:6: ( ( () 'Addition' '{' ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )? '}' ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:923:1: ( () 'Addition' '{' ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )? '}' )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:923:1: ( () 'Addition' '{' ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )? '}' )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:923:2: () 'Addition' '{' ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )? '}'
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:923:2: ()
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:924:5: 
            {
             
                    temp=factory.create(grammarAccess.getAdditionAccess().getAdditionAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getAdditionAccess().getAdditionAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,29,FollowSets000.FOLLOW_29_in_ruleAddition1703); 

                    createLeafNode(grammarAccess.getAdditionAccess().getAdditionKeyword_1(), null); 
                
            match(input,12,FollowSets000.FOLLOW_12_in_ruleAddition1713); 

                    createLeafNode(grammarAccess.getAdditionAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:942:1: ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )?
            int alt19=2;
            int LA19_0 = input.LA(1);

            if ( (LA19_0==30) ) {
                alt19=1;
            }
            switch (alt19) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:942:3: 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}'
                    {
                    match(input,30,FollowSets000.FOLLOW_30_in_ruleAddition1724); 

                            createLeafNode(grammarAccess.getAdditionAccess().getValuesKeyword_3_0(), null); 
                        
                    match(input,12,FollowSets000.FOLLOW_12_in_ruleAddition1734); 

                            createLeafNode(grammarAccess.getAdditionAccess().getLeftCurlyBracketKeyword_3_1(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:950:1: ( (lv_values_5_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:951:1: (lv_values_5_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:951:1: (lv_values_5_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:952:3: lv_values_5_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getAdditionAccess().getValuesValueParserRuleCall_3_2_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_ruleAddition1755);
                    lv_values_5_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getAdditionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"values",
                    	        		lv_values_5_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:974:2: ( ',' ( (lv_values_7_0= ruleValue ) ) )*
                    loop18:
                    do {
                        int alt18=2;
                        int LA18_0 = input.LA(1);

                        if ( (LA18_0==14) ) {
                            alt18=1;
                        }


                        switch (alt18) {
                    	case 1 :
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:974:4: ',' ( (lv_values_7_0= ruleValue ) )
                    	    {
                    	    match(input,14,FollowSets000.FOLLOW_14_in_ruleAddition1766); 

                    	            createLeafNode(grammarAccess.getAdditionAccess().getCommaKeyword_3_3_0(), null); 
                    	        
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:978:1: ( (lv_values_7_0= ruleValue ) )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:979:1: (lv_values_7_0= ruleValue )
                    	    {
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:979:1: (lv_values_7_0= ruleValue )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:980:3: lv_values_7_0= ruleValue
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getAdditionAccess().getValuesValueParserRuleCall_3_3_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleValue_in_ruleAddition1787);
                    	    lv_values_7_0=ruleValue();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getAdditionRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"values",
                    	    	        		lv_values_7_0, 
                    	    	        		"Value", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop18;
                        }
                    } while (true);

                    match(input,15,FollowSets000.FOLLOW_15_in_ruleAddition1799); 

                            createLeafNode(grammarAccess.getAdditionAccess().getRightCurlyBracketKeyword_3_4(), null); 
                        

                    }
                    break;

            }

            match(input,15,FollowSets000.FOLLOW_15_in_ruleAddition1811); 

                    createLeafNode(grammarAccess.getAdditionAccess().getRightCurlyBracketKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleAddition


    // $ANTLR start entryRuleMultiplication
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1018:1: entryRuleMultiplication returns [EObject current=null] : iv_ruleMultiplication= ruleMultiplication EOF ;
    public final EObject entryRuleMultiplication() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMultiplication = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1019:2: (iv_ruleMultiplication= ruleMultiplication EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1020:2: iv_ruleMultiplication= ruleMultiplication EOF
            {
             currentNode = createCompositeNode(grammarAccess.getMultiplicationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleMultiplication_in_entryRuleMultiplication1847);
            iv_ruleMultiplication=ruleMultiplication();
            _fsp--;

             current =iv_ruleMultiplication; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMultiplication1857); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleMultiplication


    // $ANTLR start ruleMultiplication
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1027:1: ruleMultiplication returns [EObject current=null] : ( () 'Multiplication' '{' ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )? '}' ) ;
    public final EObject ruleMultiplication() throws RecognitionException {
        EObject current = null;

        EObject lv_values_5_0 = null;

        EObject lv_values_7_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1032:6: ( ( () 'Multiplication' '{' ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )? '}' ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1033:1: ( () 'Multiplication' '{' ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )? '}' )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1033:1: ( () 'Multiplication' '{' ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )? '}' )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1033:2: () 'Multiplication' '{' ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )? '}'
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1033:2: ()
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1034:5: 
            {
             
                    temp=factory.create(grammarAccess.getMultiplicationAccess().getMultiplicationAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getMultiplicationAccess().getMultiplicationAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,31,FollowSets000.FOLLOW_31_in_ruleMultiplication1901); 

                    createLeafNode(grammarAccess.getMultiplicationAccess().getMultiplicationKeyword_1(), null); 
                
            match(input,12,FollowSets000.FOLLOW_12_in_ruleMultiplication1911); 

                    createLeafNode(grammarAccess.getMultiplicationAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1052:1: ( 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}' )?
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==30) ) {
                alt21=1;
            }
            switch (alt21) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1052:3: 'values' '{' ( (lv_values_5_0= ruleValue ) ) ( ',' ( (lv_values_7_0= ruleValue ) ) )* '}'
                    {
                    match(input,30,FollowSets000.FOLLOW_30_in_ruleMultiplication1922); 

                            createLeafNode(grammarAccess.getMultiplicationAccess().getValuesKeyword_3_0(), null); 
                        
                    match(input,12,FollowSets000.FOLLOW_12_in_ruleMultiplication1932); 

                            createLeafNode(grammarAccess.getMultiplicationAccess().getLeftCurlyBracketKeyword_3_1(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1060:1: ( (lv_values_5_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1061:1: (lv_values_5_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1061:1: (lv_values_5_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1062:3: lv_values_5_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getMultiplicationAccess().getValuesValueParserRuleCall_3_2_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_ruleMultiplication1953);
                    lv_values_5_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getMultiplicationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"values",
                    	        		lv_values_5_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1084:2: ( ',' ( (lv_values_7_0= ruleValue ) ) )*
                    loop20:
                    do {
                        int alt20=2;
                        int LA20_0 = input.LA(1);

                        if ( (LA20_0==14) ) {
                            alt20=1;
                        }


                        switch (alt20) {
                    	case 1 :
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1084:4: ',' ( (lv_values_7_0= ruleValue ) )
                    	    {
                    	    match(input,14,FollowSets000.FOLLOW_14_in_ruleMultiplication1964); 

                    	            createLeafNode(grammarAccess.getMultiplicationAccess().getCommaKeyword_3_3_0(), null); 
                    	        
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1088:1: ( (lv_values_7_0= ruleValue ) )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1089:1: (lv_values_7_0= ruleValue )
                    	    {
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1089:1: (lv_values_7_0= ruleValue )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1090:3: lv_values_7_0= ruleValue
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getMultiplicationAccess().getValuesValueParserRuleCall_3_3_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleValue_in_ruleMultiplication1985);
                    	    lv_values_7_0=ruleValue();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getMultiplicationRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"values",
                    	    	        		lv_values_7_0, 
                    	    	        		"Value", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop20;
                        }
                    } while (true);

                    match(input,15,FollowSets000.FOLLOW_15_in_ruleMultiplication1997); 

                            createLeafNode(grammarAccess.getMultiplicationAccess().getRightCurlyBracketKeyword_3_4(), null); 
                        

                    }
                    break;

            }

            match(input,15,FollowSets000.FOLLOW_15_in_ruleMultiplication2009); 

                    createLeafNode(grammarAccess.getMultiplicationAccess().getRightCurlyBracketKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleMultiplication


    // $ANTLR start entryRuleEDouble
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1128:1: entryRuleEDouble returns [String current=null] : iv_ruleEDouble= ruleEDouble EOF ;
    public final String entryRuleEDouble() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleEDouble = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1129:2: (iv_ruleEDouble= ruleEDouble EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1130:2: iv_ruleEDouble= ruleEDouble EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEDoubleRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleEDouble_in_entryRuleEDouble2046);
            iv_ruleEDouble=ruleEDouble();
            _fsp--;

             current =iv_ruleEDouble.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEDouble2057); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEDouble


    // $ANTLR start ruleEDouble
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1137:1: ruleEDouble returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? (this_INT_1= RULE_INT )? kw= '.' this_INT_3= RULE_INT ( (kw= 'E' | kw= 'e' ) (kw= '-' )? this_INT_7= RULE_INT )? ) ;
    public final AntlrDatatypeRuleToken ruleEDouble() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        Token this_INT_1=null;
        Token this_INT_3=null;
        Token this_INT_7=null;

         setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1142:6: ( ( (kw= '-' )? (this_INT_1= RULE_INT )? kw= '.' this_INT_3= RULE_INT ( (kw= 'E' | kw= 'e' ) (kw= '-' )? this_INT_7= RULE_INT )? ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1143:1: ( (kw= '-' )? (this_INT_1= RULE_INT )? kw= '.' this_INT_3= RULE_INT ( (kw= 'E' | kw= 'e' ) (kw= '-' )? this_INT_7= RULE_INT )? )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1143:1: ( (kw= '-' )? (this_INT_1= RULE_INT )? kw= '.' this_INT_3= RULE_INT ( (kw= 'E' | kw= 'e' ) (kw= '-' )? this_INT_7= RULE_INT )? )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1143:2: (kw= '-' )? (this_INT_1= RULE_INT )? kw= '.' this_INT_3= RULE_INT ( (kw= 'E' | kw= 'e' ) (kw= '-' )? this_INT_7= RULE_INT )?
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1143:2: (kw= '-' )?
            int alt22=2;
            int LA22_0 = input.LA(1);

            if ( (LA22_0==32) ) {
                alt22=1;
            }
            switch (alt22) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1144:2: kw= '-'
                    {
                    kw=(Token)input.LT(1);
                    match(input,32,FollowSets000.FOLLOW_32_in_ruleEDouble2096); 

                            current.merge(kw);
                            createLeafNode(grammarAccess.getEDoubleAccess().getHyphenMinusKeyword_0(), null); 
                        

                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1149:3: (this_INT_1= RULE_INT )?
            int alt23=2;
            int LA23_0 = input.LA(1);

            if ( (LA23_0==RULE_INT) ) {
                alt23=1;
            }
            switch (alt23) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1149:8: this_INT_1= RULE_INT
                    {
                    this_INT_1=(Token)input.LT(1);
                    match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleEDouble2114); 

                    		current.merge(this_INT_1);
                        
                     
                        createLeafNode(grammarAccess.getEDoubleAccess().getINTTerminalRuleCall_1(), null); 
                        

                    }
                    break;

            }

            kw=(Token)input.LT(1);
            match(input,33,FollowSets000.FOLLOW_33_in_ruleEDouble2134); 

                    current.merge(kw);
                    createLeafNode(grammarAccess.getEDoubleAccess().getFullStopKeyword_2(), null); 
                
            this_INT_3=(Token)input.LT(1);
            match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleEDouble2149); 

            		current.merge(this_INT_3);
                
             
                createLeafNode(grammarAccess.getEDoubleAccess().getINTTerminalRuleCall_3(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1169:1: ( (kw= 'E' | kw= 'e' ) (kw= '-' )? this_INT_7= RULE_INT )?
            int alt26=2;
            int LA26_0 = input.LA(1);

            if ( ((LA26_0>=34 && LA26_0<=35)) ) {
                alt26=1;
            }
            switch (alt26) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1169:2: (kw= 'E' | kw= 'e' ) (kw= '-' )? this_INT_7= RULE_INT
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1169:2: (kw= 'E' | kw= 'e' )
                    int alt24=2;
                    int LA24_0 = input.LA(1);

                    if ( (LA24_0==34) ) {
                        alt24=1;
                    }
                    else if ( (LA24_0==35) ) {
                        alt24=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("1169:2: (kw= 'E' | kw= 'e' )", 24, 0, input);

                        throw nvae;
                    }
                    switch (alt24) {
                        case 1 :
                            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1170:2: kw= 'E'
                            {
                            kw=(Token)input.LT(1);
                            match(input,34,FollowSets000.FOLLOW_34_in_ruleEDouble2169); 

                                    current.merge(kw);
                                    createLeafNode(grammarAccess.getEDoubleAccess().getEKeyword_4_0_0(), null); 
                                

                            }
                            break;
                        case 2 :
                            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1177:2: kw= 'e'
                            {
                            kw=(Token)input.LT(1);
                            match(input,35,FollowSets000.FOLLOW_35_in_ruleEDouble2188); 

                                    current.merge(kw);
                                    createLeafNode(grammarAccess.getEDoubleAccess().getEKeyword_4_0_1(), null); 
                                

                            }
                            break;

                    }

                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1182:2: (kw= '-' )?
                    int alt25=2;
                    int LA25_0 = input.LA(1);

                    if ( (LA25_0==32) ) {
                        alt25=1;
                    }
                    switch (alt25) {
                        case 1 :
                            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1183:2: kw= '-'
                            {
                            kw=(Token)input.LT(1);
                            match(input,32,FollowSets000.FOLLOW_32_in_ruleEDouble2203); 

                                    current.merge(kw);
                                    createLeafNode(grammarAccess.getEDoubleAccess().getHyphenMinusKeyword_4_1(), null); 
                                

                            }
                            break;

                    }

                    this_INT_7=(Token)input.LT(1);
                    match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleEDouble2220); 

                    		current.merge(this_INT_7);
                        
                     
                        createLeafNode(grammarAccess.getEDoubleAccess().getINTTerminalRuleCall_4_2(), null); 
                        

                    }
                    break;

            }


            }


            }

             resetLookahead(); 
            	    lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEDouble


    // $ANTLR start entryRuleRectangularBoard
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1203:1: entryRuleRectangularBoard returns [EObject current=null] : iv_ruleRectangularBoard= ruleRectangularBoard EOF ;
    public final EObject entryRuleRectangularBoard() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRectangularBoard = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1204:2: (iv_ruleRectangularBoard= ruleRectangularBoard EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1205:2: iv_ruleRectangularBoard= ruleRectangularBoard EOF
            {
             currentNode = createCompositeNode(grammarAccess.getRectangularBoardRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleRectangularBoard_in_entryRuleRectangularBoard2267);
            iv_ruleRectangularBoard=ruleRectangularBoard();
            _fsp--;

             current =iv_ruleRectangularBoard; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRectangularBoard2277); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleRectangularBoard


    // $ANTLR start ruleRectangularBoard
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1212:1: ruleRectangularBoard returns [EObject current=null] : ( () 'RectangularBoard' ( (lv_name_2_0= ruleEString ) ) '{' ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )? ( 'X' ( (lv_X_7_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_9_0= ruleValue ) ) )? '}' ) ;
    public final EObject ruleRectangularBoard() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_name_2_0 = null;

        EObject lv_thickness_5_0 = null;

        EObject lv_X_7_0 = null;

        EObject lv_Y_9_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1217:6: ( ( () 'RectangularBoard' ( (lv_name_2_0= ruleEString ) ) '{' ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )? ( 'X' ( (lv_X_7_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_9_0= ruleValue ) ) )? '}' ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1218:1: ( () 'RectangularBoard' ( (lv_name_2_0= ruleEString ) ) '{' ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )? ( 'X' ( (lv_X_7_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_9_0= ruleValue ) ) )? '}' )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1218:1: ( () 'RectangularBoard' ( (lv_name_2_0= ruleEString ) ) '{' ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )? ( 'X' ( (lv_X_7_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_9_0= ruleValue ) ) )? '}' )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1218:2: () 'RectangularBoard' ( (lv_name_2_0= ruleEString ) ) '{' ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )? ( 'X' ( (lv_X_7_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_9_0= ruleValue ) ) )? '}'
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1218:2: ()
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1219:5: 
            {
             
                    temp=factory.create(grammarAccess.getRectangularBoardAccess().getRectangularBoardAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getRectangularBoardAccess().getRectangularBoardAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,36,FollowSets000.FOLLOW_36_in_ruleRectangularBoard2321); 

                    createLeafNode(grammarAccess.getRectangularBoardAccess().getRectangularBoardKeyword_1(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1233:1: ( (lv_name_2_0= ruleEString ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1234:1: (lv_name_2_0= ruleEString )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1234:1: (lv_name_2_0= ruleEString )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1235:3: lv_name_2_0= ruleEString
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getRectangularBoardAccess().getNameEStringParserRuleCall_2_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRectangularBoard2342);
            lv_name_2_0=ruleEString();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getRectangularBoardRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_2_0, 
            	        		"EString", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,12,FollowSets000.FOLLOW_12_in_ruleRectangularBoard2352); 

                    createLeafNode(grammarAccess.getRectangularBoardAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1261:1: ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )?
            int alt27=2;
            int LA27_0 = input.LA(1);

            if ( (LA27_0==37) ) {
                alt27=1;
            }
            switch (alt27) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1261:3: 'thickness' ( (lv_thickness_5_0= ruleValue ) )
                    {
                    match(input,37,FollowSets000.FOLLOW_37_in_ruleRectangularBoard2363); 

                            createLeafNode(grammarAccess.getRectangularBoardAccess().getThicknessKeyword_4_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1265:1: ( (lv_thickness_5_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1266:1: (lv_thickness_5_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1266:1: (lv_thickness_5_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1267:3: lv_thickness_5_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getRectangularBoardAccess().getThicknessValueParserRuleCall_4_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_ruleRectangularBoard2384);
                    lv_thickness_5_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getRectangularBoardRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"thickness",
                    	        		lv_thickness_5_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1289:4: ( 'X' ( (lv_X_7_0= ruleValue ) ) )?
            int alt28=2;
            int LA28_0 = input.LA(1);

            if ( (LA28_0==23) ) {
                alt28=1;
            }
            switch (alt28) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1289:6: 'X' ( (lv_X_7_0= ruleValue ) )
                    {
                    match(input,23,FollowSets000.FOLLOW_23_in_ruleRectangularBoard2397); 

                            createLeafNode(grammarAccess.getRectangularBoardAccess().getXKeyword_5_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1293:1: ( (lv_X_7_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1294:1: (lv_X_7_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1294:1: (lv_X_7_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1295:3: lv_X_7_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getRectangularBoardAccess().getXValueParserRuleCall_5_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_ruleRectangularBoard2418);
                    lv_X_7_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getRectangularBoardRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"X",
                    	        		lv_X_7_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1317:4: ( 'Y' ( (lv_Y_9_0= ruleValue ) ) )?
            int alt29=2;
            int LA29_0 = input.LA(1);

            if ( (LA29_0==24) ) {
                alt29=1;
            }
            switch (alt29) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1317:6: 'Y' ( (lv_Y_9_0= ruleValue ) )
                    {
                    match(input,24,FollowSets000.FOLLOW_24_in_ruleRectangularBoard2431); 

                            createLeafNode(grammarAccess.getRectangularBoardAccess().getYKeyword_6_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1321:1: ( (lv_Y_9_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1322:1: (lv_Y_9_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1322:1: (lv_Y_9_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1323:3: lv_Y_9_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getRectangularBoardAccess().getYValueParserRuleCall_6_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_ruleRectangularBoard2452);
                    lv_Y_9_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getRectangularBoardRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"Y",
                    	        		lv_Y_9_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,15,FollowSets000.FOLLOW_15_in_ruleRectangularBoard2464); 

                    createLeafNode(grammarAccess.getRectangularBoardAccess().getRightCurlyBracketKeyword_7(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleRectangularBoard


    // $ANTLR start entryRulePolygonBoard
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1357:1: entryRulePolygonBoard returns [EObject current=null] : iv_rulePolygonBoard= rulePolygonBoard EOF ;
    public final EObject entryRulePolygonBoard() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePolygonBoard = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1358:2: (iv_rulePolygonBoard= rulePolygonBoard EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1359:2: iv_rulePolygonBoard= rulePolygonBoard EOF
            {
             currentNode = createCompositeNode(grammarAccess.getPolygonBoardRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_rulePolygonBoard_in_entryRulePolygonBoard2500);
            iv_rulePolygonBoard=rulePolygonBoard();
            _fsp--;

             current =iv_rulePolygonBoard; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePolygonBoard2510); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRulePolygonBoard


    // $ANTLR start rulePolygonBoard
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1366:1: rulePolygonBoard returns [EObject current=null] : ( () 'PolygonBoard' ( (lv_name_2_0= ruleEString ) ) '{' ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )? ( 'points' '{' ( (lv_points_8_0= rulePoint ) ) ( ',' ( (lv_points_10_0= rulePoint ) ) )* '}' )? '}' ) ;
    public final EObject rulePolygonBoard() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_name_2_0 = null;

        EObject lv_thickness_5_0 = null;

        EObject lv_points_8_0 = null;

        EObject lv_points_10_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1371:6: ( ( () 'PolygonBoard' ( (lv_name_2_0= ruleEString ) ) '{' ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )? ( 'points' '{' ( (lv_points_8_0= rulePoint ) ) ( ',' ( (lv_points_10_0= rulePoint ) ) )* '}' )? '}' ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1372:1: ( () 'PolygonBoard' ( (lv_name_2_0= ruleEString ) ) '{' ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )? ( 'points' '{' ( (lv_points_8_0= rulePoint ) ) ( ',' ( (lv_points_10_0= rulePoint ) ) )* '}' )? '}' )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1372:1: ( () 'PolygonBoard' ( (lv_name_2_0= ruleEString ) ) '{' ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )? ( 'points' '{' ( (lv_points_8_0= rulePoint ) ) ( ',' ( (lv_points_10_0= rulePoint ) ) )* '}' )? '}' )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1372:2: () 'PolygonBoard' ( (lv_name_2_0= ruleEString ) ) '{' ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )? ( 'points' '{' ( (lv_points_8_0= rulePoint ) ) ( ',' ( (lv_points_10_0= rulePoint ) ) )* '}' )? '}'
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1372:2: ()
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1373:5: 
            {
             
                    temp=factory.create(grammarAccess.getPolygonBoardAccess().getPolygonBoardAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getPolygonBoardAccess().getPolygonBoardAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,38,FollowSets000.FOLLOW_38_in_rulePolygonBoard2554); 

                    createLeafNode(grammarAccess.getPolygonBoardAccess().getPolygonBoardKeyword_1(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1387:1: ( (lv_name_2_0= ruleEString ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1388:1: (lv_name_2_0= ruleEString )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1388:1: (lv_name_2_0= ruleEString )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1389:3: lv_name_2_0= ruleEString
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getPolygonBoardAccess().getNameEStringParserRuleCall_2_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_rulePolygonBoard2575);
            lv_name_2_0=ruleEString();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getPolygonBoardRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_2_0, 
            	        		"EString", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,12,FollowSets000.FOLLOW_12_in_rulePolygonBoard2585); 

                    createLeafNode(grammarAccess.getPolygonBoardAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1415:1: ( 'thickness' ( (lv_thickness_5_0= ruleValue ) ) )?
            int alt30=2;
            int LA30_0 = input.LA(1);

            if ( (LA30_0==37) ) {
                alt30=1;
            }
            switch (alt30) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1415:3: 'thickness' ( (lv_thickness_5_0= ruleValue ) )
                    {
                    match(input,37,FollowSets000.FOLLOW_37_in_rulePolygonBoard2596); 

                            createLeafNode(grammarAccess.getPolygonBoardAccess().getThicknessKeyword_4_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1419:1: ( (lv_thickness_5_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1420:1: (lv_thickness_5_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1420:1: (lv_thickness_5_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1421:3: lv_thickness_5_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getPolygonBoardAccess().getThicknessValueParserRuleCall_4_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_rulePolygonBoard2617);
                    lv_thickness_5_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getPolygonBoardRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"thickness",
                    	        		lv_thickness_5_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1443:4: ( 'points' '{' ( (lv_points_8_0= rulePoint ) ) ( ',' ( (lv_points_10_0= rulePoint ) ) )* '}' )?
            int alt32=2;
            int LA32_0 = input.LA(1);

            if ( (LA32_0==39) ) {
                alt32=1;
            }
            switch (alt32) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1443:6: 'points' '{' ( (lv_points_8_0= rulePoint ) ) ( ',' ( (lv_points_10_0= rulePoint ) ) )* '}'
                    {
                    match(input,39,FollowSets000.FOLLOW_39_in_rulePolygonBoard2630); 

                            createLeafNode(grammarAccess.getPolygonBoardAccess().getPointsKeyword_5_0(), null); 
                        
                    match(input,12,FollowSets000.FOLLOW_12_in_rulePolygonBoard2640); 

                            createLeafNode(grammarAccess.getPolygonBoardAccess().getLeftCurlyBracketKeyword_5_1(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1451:1: ( (lv_points_8_0= rulePoint ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1452:1: (lv_points_8_0= rulePoint )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1452:1: (lv_points_8_0= rulePoint )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1453:3: lv_points_8_0= rulePoint
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getPolygonBoardAccess().getPointsPointParserRuleCall_5_2_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_rulePoint_in_rulePolygonBoard2661);
                    lv_points_8_0=rulePoint();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getPolygonBoardRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"points",
                    	        		lv_points_8_0, 
                    	        		"Point", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1475:2: ( ',' ( (lv_points_10_0= rulePoint ) ) )*
                    loop31:
                    do {
                        int alt31=2;
                        int LA31_0 = input.LA(1);

                        if ( (LA31_0==14) ) {
                            alt31=1;
                        }


                        switch (alt31) {
                    	case 1 :
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1475:4: ',' ( (lv_points_10_0= rulePoint ) )
                    	    {
                    	    match(input,14,FollowSets000.FOLLOW_14_in_rulePolygonBoard2672); 

                    	            createLeafNode(grammarAccess.getPolygonBoardAccess().getCommaKeyword_5_3_0(), null); 
                    	        
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1479:1: ( (lv_points_10_0= rulePoint ) )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1480:1: (lv_points_10_0= rulePoint )
                    	    {
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1480:1: (lv_points_10_0= rulePoint )
                    	    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1481:3: lv_points_10_0= rulePoint
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getPolygonBoardAccess().getPointsPointParserRuleCall_5_3_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_rulePoint_in_rulePolygonBoard2693);
                    	    lv_points_10_0=rulePoint();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getPolygonBoardRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"points",
                    	    	        		lv_points_10_0, 
                    	    	        		"Point", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop31;
                        }
                    } while (true);

                    match(input,15,FollowSets000.FOLLOW_15_in_rulePolygonBoard2705); 

                            createLeafNode(grammarAccess.getPolygonBoardAccess().getRightCurlyBracketKeyword_5_4(), null); 
                        

                    }
                    break;

            }

            match(input,15,FollowSets000.FOLLOW_15_in_rulePolygonBoard2717); 

                    createLeafNode(grammarAccess.getPolygonBoardAccess().getRightCurlyBracketKeyword_6(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end rulePolygonBoard


    // $ANTLR start entryRulePoint
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1519:1: entryRulePoint returns [EObject current=null] : iv_rulePoint= rulePoint EOF ;
    public final EObject entryRulePoint() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePoint = null;


        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1520:2: (iv_rulePoint= rulePoint EOF )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1521:2: iv_rulePoint= rulePoint EOF
            {
             currentNode = createCompositeNode(grammarAccess.getPointRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_rulePoint_in_entryRulePoint2753);
            iv_rulePoint=rulePoint();
            _fsp--;

             current =iv_rulePoint; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePoint2763); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRulePoint


    // $ANTLR start rulePoint
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1528:1: rulePoint returns [EObject current=null] : ( () 'Point' '{' ( 'X' ( (lv_X_4_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_6_0= ruleValue ) ) )? '}' ) ;
    public final EObject rulePoint() throws RecognitionException {
        EObject current = null;

        EObject lv_X_4_0 = null;

        EObject lv_Y_6_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1533:6: ( ( () 'Point' '{' ( 'X' ( (lv_X_4_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_6_0= ruleValue ) ) )? '}' ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1534:1: ( () 'Point' '{' ( 'X' ( (lv_X_4_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_6_0= ruleValue ) ) )? '}' )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1534:1: ( () 'Point' '{' ( 'X' ( (lv_X_4_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_6_0= ruleValue ) ) )? '}' )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1534:2: () 'Point' '{' ( 'X' ( (lv_X_4_0= ruleValue ) ) )? ( 'Y' ( (lv_Y_6_0= ruleValue ) ) )? '}'
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1534:2: ()
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1535:5: 
            {
             
                    temp=factory.create(grammarAccess.getPointAccess().getPointAction_0().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getPointAccess().getPointAction_0(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            match(input,40,FollowSets000.FOLLOW_40_in_rulePoint2807); 

                    createLeafNode(grammarAccess.getPointAccess().getPointKeyword_1(), null); 
                
            match(input,12,FollowSets000.FOLLOW_12_in_rulePoint2817); 

                    createLeafNode(grammarAccess.getPointAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1553:1: ( 'X' ( (lv_X_4_0= ruleValue ) ) )?
            int alt33=2;
            int LA33_0 = input.LA(1);

            if ( (LA33_0==23) ) {
                alt33=1;
            }
            switch (alt33) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1553:3: 'X' ( (lv_X_4_0= ruleValue ) )
                    {
                    match(input,23,FollowSets000.FOLLOW_23_in_rulePoint2828); 

                            createLeafNode(grammarAccess.getPointAccess().getXKeyword_3_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1557:1: ( (lv_X_4_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1558:1: (lv_X_4_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1558:1: (lv_X_4_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1559:3: lv_X_4_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getPointAccess().getXValueParserRuleCall_3_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_rulePoint2849);
                    lv_X_4_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getPointRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"X",
                    	        		lv_X_4_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1581:4: ( 'Y' ( (lv_Y_6_0= ruleValue ) ) )?
            int alt34=2;
            int LA34_0 = input.LA(1);

            if ( (LA34_0==24) ) {
                alt34=1;
            }
            switch (alt34) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1581:6: 'Y' ( (lv_Y_6_0= ruleValue ) )
                    {
                    match(input,24,FollowSets000.FOLLOW_24_in_rulePoint2862); 

                            createLeafNode(grammarAccess.getPointAccess().getYKeyword_4_0(), null); 
                        
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1585:1: ( (lv_Y_6_0= ruleValue ) )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1586:1: (lv_Y_6_0= ruleValue )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1586:1: (lv_Y_6_0= ruleValue )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1587:3: lv_Y_6_0= ruleValue
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getPointAccess().getYValueParserRuleCall_4_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleValue_in_rulePoint2883);
                    lv_Y_6_0=ruleValue();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getPointRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"Y",
                    	        		lv_Y_6_0, 
                    	        		"Value", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,15,FollowSets000.FOLLOW_15_in_rulePoint2895); 

                    createLeafNode(grammarAccess.getPointAccess().getRightCurlyBracketKeyword_5(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end rulePoint


    // $ANTLR start rulePlacement
    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1621:1: rulePlacement returns [Enumerator current=null] : ( ( 'HORIZONTAL' ) | ( 'VERTICAL' ) | ( 'FACE' ) ) ;
    public final Enumerator rulePlacement() throws RecognitionException {
        Enumerator current = null;

         setCurrentLookahead(); resetLookahead(); 
        try {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1625:6: ( ( ( 'HORIZONTAL' ) | ( 'VERTICAL' ) | ( 'FACE' ) ) )
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1626:1: ( ( 'HORIZONTAL' ) | ( 'VERTICAL' ) | ( 'FACE' ) )
            {
            // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1626:1: ( ( 'HORIZONTAL' ) | ( 'VERTICAL' ) | ( 'FACE' ) )
            int alt35=3;
            switch ( input.LA(1) ) {
            case 41:
                {
                alt35=1;
                }
                break;
            case 42:
                {
                alt35=2;
                }
                break;
            case 43:
                {
                alt35=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("1626:1: ( ( 'HORIZONTAL' ) | ( 'VERTICAL' ) | ( 'FACE' ) )", 35, 0, input);

                throw nvae;
            }

            switch (alt35) {
                case 1 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1626:2: ( 'HORIZONTAL' )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1626:2: ( 'HORIZONTAL' )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1626:4: 'HORIZONTAL'
                    {
                    match(input,41,FollowSets000.FOLLOW_41_in_rulePlacement2943); 

                            current = grammarAccess.getPlacementAccess().getHORIZONTALEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getPlacementAccess().getHORIZONTALEnumLiteralDeclaration_0(), null); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1632:6: ( 'VERTICAL' )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1632:6: ( 'VERTICAL' )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1632:8: 'VERTICAL'
                    {
                    match(input,42,FollowSets000.FOLLOW_42_in_rulePlacement2958); 

                            current = grammarAccess.getPlacementAccess().getVERTICALEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getPlacementAccess().getVERTICALEnumLiteralDeclaration_1(), null); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1638:6: ( 'FACE' )
                    {
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1638:6: ( 'FACE' )
                    // ../furniture.Notation/src-gen/furniture/parser/antlr/internal/InternalNotation.g:1638:8: 'FACE'
                    {
                    match(input,43,FollowSets000.FOLLOW_43_in_rulePlacement2973); 

                            current = grammarAccess.getPlacementAccess().getFACEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getPlacementAccess().getFACEEnumLiteralDeclaration_2(), null); 
                        

                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end rulePlacement


 

    
    private static class FollowSets000 {
        public static final BitSet FOLLOW_ruleFurniture_in_entryRuleFurniture75 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleFurniture85 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_11_in_ruleFurniture129 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleFurniture139 = new BitSet(new long[]{0x000000000003A000L});
        public static final BitSet FOLLOW_13_in_ruleFurniture150 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleFurniture160 = new BitSet(new long[]{0x0000000000040000L});
        public static final BitSet FOLLOW_ruleNamedValue_in_ruleFurniture181 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_14_in_ruleFurniture192 = new BitSet(new long[]{0x0000000000040000L});
        public static final BitSet FOLLOW_ruleNamedValue_in_ruleFurniture213 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_15_in_ruleFurniture225 = new BitSet(new long[]{0x0000000000038000L});
        public static final BitSet FOLLOW_16_in_ruleFurniture238 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleFurniture248 = new BitSet(new long[]{0x0000005000000000L});
        public static final BitSet FOLLOW_ruleBoard_in_ruleFurniture269 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_14_in_ruleFurniture280 = new BitSet(new long[]{0x0000005000000000L});
        public static final BitSet FOLLOW_ruleBoard_in_ruleFurniture301 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_15_in_ruleFurniture313 = new BitSet(new long[]{0x0000000000028000L});
        public static final BitSet FOLLOW_17_in_ruleFurniture326 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleFurniture336 = new BitSet(new long[]{0x0000000000100000L});
        public static final BitSet FOLLOW_rulePart_in_ruleFurniture357 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_14_in_ruleFurniture368 = new BitSet(new long[]{0x0000000000100000L});
        public static final BitSet FOLLOW_rulePart_in_ruleFurniture389 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_15_in_ruleFurniture401 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_15_in_ruleFurniture413 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleBoard_in_entryRuleBoard449 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleBoard459 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleRectangularBoard_in_ruleBoard506 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_rulePolygonBoard_in_ruleBoard533 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleValue_in_entryRuleValue568 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleValue578 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleNamedValue_in_ruleValue625 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleLiteral_in_ruleValue652 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleValueRef_in_ruleValue679 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleAddition_in_ruleValue706 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleMultiplication_in_ruleValue733 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleNamedValue_in_entryRuleNamedValue768 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleNamedValue778 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_18_in_ruleNamedValue822 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleNamedValue843 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleNamedValue853 = new BitSet(new long[]{0x0000000000088000L});
        public static final BitSet FOLLOW_19_in_ruleNamedValue864 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_ruleNamedValue885 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_15_in_ruleNamedValue897 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_rulePart_in_entryRulePart933 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRulePart943 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_20_in_rulePart987 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_rulePart1008 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_rulePart1018 = new BitSet(new long[]{0x0000000003E08000L});
        public static final BitSet FOLLOW_21_in_rulePart1029 = new BitSet(new long[]{0x00000E0000000000L});
        public static final BitSet FOLLOW_rulePlacement_in_rulePart1050 = new BitSet(new long[]{0x0000000003C08000L});
        public static final BitSet FOLLOW_22_in_rulePart1063 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_rulePart1086 = new BitSet(new long[]{0x0000000003808000L});
        public static final BitSet FOLLOW_23_in_rulePart1099 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_rulePart1120 = new BitSet(new long[]{0x0000000003008000L});
        public static final BitSet FOLLOW_24_in_rulePart1133 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_rulePart1154 = new BitSet(new long[]{0x0000000002008000L});
        public static final BitSet FOLLOW_25_in_rulePart1167 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_rulePart1188 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_15_in_rulePart1200 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_entryRuleEString1237 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEString1248 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleEString1288 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleEString1314 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleLiteral_in_entryRuleLiteral1359 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleLiteral1369 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_26_in_ruleLiteral1413 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleLiteral1423 = new BitSet(new long[]{0x0000000000088000L});
        public static final BitSet FOLLOW_19_in_ruleLiteral1434 = new BitSet(new long[]{0x0000000300000040L});
        public static final BitSet FOLLOW_ruleEDouble_in_ruleLiteral1455 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_15_in_ruleLiteral1467 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleValueRef_in_entryRuleValueRef1503 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleValueRef1513 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_27_in_ruleValueRef1557 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleValueRef1567 = new BitSet(new long[]{0x0000000010008000L});
        public static final BitSet FOLLOW_28_in_ruleValueRef1578 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleValueRef1601 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_15_in_ruleValueRef1613 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleAddition_in_entryRuleAddition1649 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleAddition1659 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_29_in_ruleAddition1703 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleAddition1713 = new BitSet(new long[]{0x0000000040008000L});
        public static final BitSet FOLLOW_30_in_ruleAddition1724 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleAddition1734 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_ruleAddition1755 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_14_in_ruleAddition1766 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_ruleAddition1787 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_15_in_ruleAddition1799 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_15_in_ruleAddition1811 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleMultiplication_in_entryRuleMultiplication1847 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleMultiplication1857 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_31_in_ruleMultiplication1901 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleMultiplication1911 = new BitSet(new long[]{0x0000000040008000L});
        public static final BitSet FOLLOW_30_in_ruleMultiplication1922 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleMultiplication1932 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_ruleMultiplication1953 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_14_in_ruleMultiplication1964 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_ruleMultiplication1985 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_15_in_ruleMultiplication1997 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_15_in_ruleMultiplication2009 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEDouble_in_entryRuleEDouble2046 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEDouble2057 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_32_in_ruleEDouble2096 = new BitSet(new long[]{0x0000000200000040L});
        public static final BitSet FOLLOW_RULE_INT_in_ruleEDouble2114 = new BitSet(new long[]{0x0000000200000000L});
        public static final BitSet FOLLOW_33_in_ruleEDouble2134 = new BitSet(new long[]{0x0000000000000040L});
        public static final BitSet FOLLOW_RULE_INT_in_ruleEDouble2149 = new BitSet(new long[]{0x0000000C00000002L});
        public static final BitSet FOLLOW_34_in_ruleEDouble2169 = new BitSet(new long[]{0x0000000100000040L});
        public static final BitSet FOLLOW_35_in_ruleEDouble2188 = new BitSet(new long[]{0x0000000100000040L});
        public static final BitSet FOLLOW_32_in_ruleEDouble2203 = new BitSet(new long[]{0x0000000000000040L});
        public static final BitSet FOLLOW_RULE_INT_in_ruleEDouble2220 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleRectangularBoard_in_entryRuleRectangularBoard2267 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleRectangularBoard2277 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_36_in_ruleRectangularBoard2321 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleRectangularBoard2342 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleRectangularBoard2352 = new BitSet(new long[]{0x0000002001808000L});
        public static final BitSet FOLLOW_37_in_ruleRectangularBoard2363 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_ruleRectangularBoard2384 = new BitSet(new long[]{0x0000000001808000L});
        public static final BitSet FOLLOW_23_in_ruleRectangularBoard2397 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_ruleRectangularBoard2418 = new BitSet(new long[]{0x0000000001008000L});
        public static final BitSet FOLLOW_24_in_ruleRectangularBoard2431 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_ruleRectangularBoard2452 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_15_in_ruleRectangularBoard2464 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_rulePolygonBoard_in_entryRulePolygonBoard2500 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRulePolygonBoard2510 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_38_in_rulePolygonBoard2554 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_rulePolygonBoard2575 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_rulePolygonBoard2585 = new BitSet(new long[]{0x000000A000008000L});
        public static final BitSet FOLLOW_37_in_rulePolygonBoard2596 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_rulePolygonBoard2617 = new BitSet(new long[]{0x0000008000008000L});
        public static final BitSet FOLLOW_39_in_rulePolygonBoard2630 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_rulePolygonBoard2640 = new BitSet(new long[]{0x0000010000000000L});
        public static final BitSet FOLLOW_rulePoint_in_rulePolygonBoard2661 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_14_in_rulePolygonBoard2672 = new BitSet(new long[]{0x0000010000000000L});
        public static final BitSet FOLLOW_rulePoint_in_rulePolygonBoard2693 = new BitSet(new long[]{0x000000000000C000L});
        public static final BitSet FOLLOW_15_in_rulePolygonBoard2705 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_15_in_rulePolygonBoard2717 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_rulePoint_in_entryRulePoint2753 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRulePoint2763 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_40_in_rulePoint2807 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_rulePoint2817 = new BitSet(new long[]{0x0000000001808000L});
        public static final BitSet FOLLOW_23_in_rulePoint2828 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_rulePoint2849 = new BitSet(new long[]{0x0000000001008000L});
        public static final BitSet FOLLOW_24_in_rulePoint2862 = new BitSet(new long[]{0x00000000AC040000L});
        public static final BitSet FOLLOW_ruleValue_in_rulePoint2883 = new BitSet(new long[]{0x0000000000008000L});
        public static final BitSet FOLLOW_15_in_rulePoint2895 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_41_in_rulePlacement2943 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_42_in_rulePlacement2958 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_43_in_rulePlacement2973 = new BitSet(new long[]{0x0000000000000002L});
    }


}